/** @class SkinCheckableInput 
	@description gere une liste d'input type checkbox/radio skinne
	@param className {string} par defaut isChecked
	@use 
		les labels possedent la class="checkbox" completee par la class="isChecked" lorsque l'input est en etat checked
		les inputs contenu dans la liste sont en visibility:hidden (avec hasJS )et les labels sont places par dessus
		les labels ont en background l'image de la checkbox non cochee avec la class="checkbox" et le background est remplace par la checkbox cochee avec la class="check"
		le javascript verifie si les inputs sont de type checkbox ou radio et adapte leur comportement en fonction
		
		il existe 2 types de checkbox / radio skines, les petits boutons amenes avec la classe checkboxList et les plus gros amenes avec la classe checkboxListBig
		
				type radio :
					<label for="myId"><input type="radio" name="myName" id="myId" .../>mon label</label>
					<label for="myId2"><input type="radio" name="myName" id="myId2" .../>mon label 2</label>
				
				type checkbox :
					<label for="myId"><input type="checkbox" name="myName" id="myId" .../>mon label</label>
					<label for="myId2"><input type="checkbox" name="myName2" id="myId2" .../>mon label 2</label>
		
		@return behavior 
*/
var SkinCheckableInput = new Class({
	initialize: function(label, className){
		this.label = $(label);
		
		
		var For = this.label.getProperty("for") || this.label.getElement('input');
		var input = $(For);
		if(input.disabled) {
			this.label.addClass('disabled');
			return;
		}
		input.addEvent('click', function(){
			if($type(this.onclick) == "function"){
				this.onclick();
			}
		})
		var className = !className ? "isChecked" : className;
		// 
		
		if(input.checked) this.label.addClass(className);
		else this.label.removeClass(className);
		
		this.label.addEvent("click", function(e){
			// si input type="radio"
			if(input.getProperty("type") == "radio"){
				e.stop();
				var name = input.getProperty("name");
				var inputs = this.getParent("form").getElements("input[name="+name+"]")
				
				// si l'element est deja checked
				if (this.hasClass(className)) {
					this.removeClass(className);
					input.checked = false;
				} 
				// sinon
				else {
					inputs.each(function(inp){
						var lab = inp.get('for') ? $(getLabel(inp)) : inp.getParent();
						if(lab.hasClass(className)) lab.removeClass(className);
						inp.checked = false;
						if($type(inp.onclick) == "function") inp.onclick();
					});
					this.addClass(className);
					input.checked = true;
				}
			// si input type="checkbox"
			} else if(input.getProperty("type") == "checkbox"){
				
				
				e.stop();
				
				// si l'element est deja checked
				if(this.hasClass(className)){
					this.removeClass(className);
					input.checked = false;
				}
				// sinon
				else{
					this.addClass(className);
					input.checked = true;
				}
			}
			// on mmodifie l'event pour le "binder" sur l'input
			e.target = input;
			input.fireEvent("click", e);
		});
	}
});
Moodule.register("SkinCheckableInput", "label.skinCheckable");
Moodule.register("SkinCheckableInput", "label.checkbox", "check");
Moodule.register("SkinCheckableInput", "label.checkboxInv", "check");